package com.zzy.sort;

/*把数组排成最小的数
输入一个非负整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。
示例 1:输入:[10,2]输出:"102"
示例 2:输入:[3,30,34,5,9]输出:"3033459"
 
提示:0<nums.length<=100
说明:
输出结果可能非常大，所以你需要返回一个字符串而不是整数
拼接起来的数字可能会有前导 0，最后结果不需要去掉前导 0*/
public class JZ45MinNumber {
    public static String minNumber(int[] nums) {
        if (nums.length == 0) {
            return "";
        }
        if (nums.length == 1) {
            return String.valueOf(nums[0]);
        }


        for (int i = 0; i < nums.length; i++) {
            int minIndex = i;
            for (int j = i + 1; j < nums.length; j++) {
                //前拼后 大于 后拼前
                if (("" + nums[minIndex] + nums[j]).compareTo("" + nums[j] + nums[minIndex]) > 0) {
                    minIndex = j;
                }
            }
            //minIndex放到最前方
            if(minIndex != i){
                exch(nums, minIndex, i);
            }

        }

        StringBuilder sb = new StringBuilder();
        for (int num : nums) {
            sb.append(num);
        }
        return sb.toString();
    }

    public static void exch(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int[] nums = new int[]{3, 30, 34, 2, 1};
        System.out.println(minNumber(nums));

    }
}
